﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MMessaging.Address
{
	/// <summary>
	/// Diese Interface kennzeichnet Messages, die von einem Service
	/// gesendet werden, der das Adress-Protokoll implementiert.
	/// Der Service bestätigt mit dieser Message, dass er existiert und unter
	/// der gegebenen Sendeadresse zu erreichen ist. Außerdem wird er 
	/// diese Message alle "IntervallTime" Millisekunden erneut senden,
	/// bis er offline geht oder aus anderen Gründen nicht mehr verfügbar ist.
	/// Mit dieser Message gibt der Service außerdem an, welche Rollen er 
	/// ausübt, d.h. über welche Gruppenadressen er außerdem erreichbar sein will.
	/// Die Message wird typischerweise an alle Empfänger gesendet (Adresse Broadcast) .
	/// </summary>
	public interface IMAddressAlifeMessage : IMAddressMessage
	{
		/// <summary>
		/// Der Service wird diese Message alle "IntervallTime" Millisekunden erneut senden.
		/// </summary>
		int IntervallTime { get; }

		/// <summary>
		/// Alle Rollen, die der Service spielt.
		/// Beachten, dass Rollenadressen keine Serviceadressen sein sollten.
		/// Geschieht dies trotzdem, kann es sein, dass 
		/// der Service Messages für diese Rolle nicht erhält.
		/// Roles darf nichts enthalten oder null zurückgeben.
		/// </summary>
		IEnumerable<MAddress> Roles { get; }
	}
}
